﻿/*
排列对称串 
Time Limit:1000MS  Memory Limit:32768K

  
Description:
很多字串，有些是对称的，有些是不对称的，请将那些对称的字串按从小到大的顺序输出。
字串先以长度论大小，如果长度相同，再以ASCII码值为大小标准。

Input:
输入数据中含有一些字串（1≤串长≤256）。 
Output:
根据每个字串，输出对称的那些串，并且要求按从小到大的顺序输出。 
Sample Input:
123321
123454321
123
321
sdfsdfd
121212
\\dd\\
Sample Output:
123321
\\dd\\
123454321
*/
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

bool compare(const string &lhs, const string &rhs)
{
	if(lhs.length()==rhs.length())
		return lhs<rhs;
	else
		return lhs.length()<rhs.length();
}

bool palindrome(string &str)
{
	for (string::iterator begin=str.begin(), end=str.end()-1; begin<end; ++begin, --end)
		if(*begin!=*end)
			return false;
	return true;
}

int main()
{

	vector<string> vs;
	for (string input;cin>>input;)
		vs.push_back(input);
	vector<string>::iterator it=vs.begin(), pivot=vs.begin();
	for (; it!=vs.end();++it)
	{
		if(palindrome(*it))
			*pivot++=*it;
	}

 	sort(vs.begin(), pivot, compare);
 	copy(vs.begin(), pivot, ostream_iterator<string>(cout, "\n"));
	return 0;
}